package file;

import java.io.File;
import java.io.FileFilter;

/**
 * 获取一个目录中符合过滤条件的所有子项
 * 重载的listFiles方法:
 *  File[] listFiles(FileFilter filter)
 *  该方法要求传入一个文件过滤器,然后仅将满足过滤器要求的所有子项返回
 *
 *  filter: 过滤器
 *  accept: 接受
 *  contains: 包含
 */
public class ListFilesDemo2 {
    public static void main(String[] args) {
        File file = new File(".");
        //FileFilter是一个接口,但是我们这里只需要使用一次,所以不需要创建一个子类
        //实现这个接口,所以使用匿名内部类是最方便的
        FileFilter fileFilter = new FileFilter() {//自动底层会创建接口的子类对象
            //子类对象重写接口的方法
            @Override
            public boolean accept(File file) {
                //写过滤器过滤的规则
                //操作的file是accept方法中接收的File参数
                String name = file.getName();//获取该元素的名字
                System.out.println("正在过滤元素:" + name);
                //contains判断字符串name是否包含o这个字符
                boolean c = name.contains("o");
                return c;
            }
        };
        //获取符合过滤器规则的元素(需要将过滤器当做参数传递给listFiles方法)
        File[] subs = file.listFiles(fileFilter);
        System.out.println("符合过滤规则的子项共有:"+subs.length);
        for (int i = 0; i < subs.length; i++) {
            System.out.println(subs[i].getName());
        }
    }
}
